package com.zzyl.common.ai;

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class QianfanApiClient {
    private final RestTemplate restTemplate;
    private final String apiUrl = "https://qianfan.baidubce.com/v2/chat/completions";
    private final String accessToken = "bce-v3/ALTAK-bjwmwAHCMXfNB7LIOBiGt/b0cac24add56ed9f196a85370a1758ed35334ecb";
    private  String prompt;

    public QianfanApiClient(RestTemplate restTemplate, String prompt) {
        this.restTemplate = restTemplate;
        this.prompt = prompt;
    }

    public String sendChatRequest() {
        // 创建请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.set("Authorization", "Bearer " + accessToken);

        // 构建请求体
        Map<String, Object> requestBody = new HashMap<>();
        requestBody.put("model", "ernie-4.5-turbo-128k-preview");

        // 构建messages列表
        List<Map<String, String>> messages = new ArrayList<>();

        // 添加user消息
        Map<String, String> userMessage = new HashMap<>();
        userMessage.put("role", "user");
        userMessage.put("content", prompt);
        messages.add(userMessage);

        requestBody.put("messages", messages);

        // 创建HttpEntity对象
        HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);

        // 发送POST请求并获取响应
        ResponseEntity<String> response = restTemplate.postForEntity(
                apiUrl,
                requestEntity,
                String.class
        );

        if (response.getStatusCode().is2xxSuccessful()) {
            String json = response.getBody();
            JSONObject jsonObject = JSONUtil.parseObj(json);
            JSONObject choices = jsonObject.getJSONArray("choices").getJSONObject(0);
            String str = choices.getJSONObject("message").getStr("content");
            return str;
        } else {
            throw new RuntimeException("API请求失败: " + response.getStatusCode());
        }
    }

    // 使用示例
    public static void main(String[] args) {
        RestTemplate restTemplate = new RestTemplate();
        String promort = "请以一个专业医生的视角来分析这份体检报告，报告中包含了一些异常数据，我需要您对这些数据进行解读，并给出相应的健康建议。\n" +
                "体检内容如下：\n" +
                " 第 1 页 共 7 页 \n" +
                "中州健康体检中心 \n" +
                " \n" +
                "体 \n" +
                "检 \n" +
                "报 \n" +
                "告 \n" +
                " \n" +
                "体检编号：  188888886    \n" +
                "姓    名：     张芳      \n" +
                "性    别：      女       \n" +
                "年    龄：    72 岁      \n" +
                "单    位：      -        \n" +
                "部门工号：      -        \n" +
                "总检日期： 2024.09.10      \n" +
                " \n" +
                " 第 2 页 共 7 页 \n" +
                "内科 \n" +
                "项目名称 检查结果 \n" +
                "心率                                          78 次/分 \n" +
                "心律 齐，无早搏 \n" +
                "心音 未见杂音 \n" +
                "肺脏 未见异常 \n" +
                "腹 平软，未见压痛发跳痛 \n" +
                "肝触诊 未见异常 \n" +
                "脾触诊 肋下未及 \n" +
                "胆囊触诊 未见异常 \n" +
                "肾触诊 未见异常 \n" +
                "神经反射 未见异常 \n" +
                "肠鸣音 未见异常 \n" +
                "其它 双下肢轻微凹陷性水肿 \n" +
                "小结：心率正常，心律齐整。腹部检查未见异常。双下肢轻微凹陷性水肿，建议进一步检查心肾功能。 \n" +
                "小结医生：史芬丽 \n" +
                "小结日期：2023.10.10 \n" +
                "外科 \n" +
                "项目名称 检查结果 \n" +
                "头面部 正常 \n" +
                "外周血管 正常 \n" +
                "皮肤 老年斑，无炎症 \n" +
                "四肢 活动正常 \n" +
                "关节 活动良好 \n" +
                "脊柱 无畸形 \n" +
                "甲状腺 无肿大 \n" +
                "浅表淋巴结 无肿大 \n" +
                "乳房 正常 \n" +
                "生殖器 正常 \n" +
                "肛门直肠 正常 \n" +
                "疝气 正常 \n" +
                "其他 正常 \n" +
                "小结：未见异常。 \n" +
                "小结医生：张建设 \n" +
                "小结日期：2023.10.10 \n" +
                "眼科 \n" +
                "项目名称 检查结果 \n" +
                "其它 无明显异常 \n" +
                "眼睑 轻微眼袋，无炎症 \n" +
                "角膜 透明，无老年环 \n" +
                "结膜 无充血 \n" +
                "视力左 0.5/ \n" +
                "视力右 0.6/ \n" +
                "色弱 无 \n" +
                "色盲 无 \n" +
                "小结：视力略有下降，建议定期复查视力，考虑配戴老花镜。 \n" +
                "小结医生：吕婷婷 \n" +
                "小结日期：2023.10.10 \n" +
                " \n" +
                " 第 3 页 共 7 页 \n" +
                " \n" +
                "耳鼻喉科 \n" +
                "项目名称 检查结果 \n" +
                "听力左 正常 \n" +
                "听力右 下降 \n" +
                "鼻中隔 居中 \n" +
                "鼻道 通畅 \n" +
                "鼻咽部 无异常 \n" +
                "口咽部 无充血 \n" +
                "其它 正常 \n" +
                "小结：右耳听力下降，建议耳鼻喉科进一步评估。 \n" +
                "小结医生：曲微微 \n" +
                "小结日期：2023.10.10 \n" +
                "眼科特诊 \n" +
                "项目名称 检查结果 \n" +
                "眼科特诊 未见异常 \n" +
                "小结：未见异常。 \n" +
                "小结医生：张海明 \n" +
                "小结日期：2023.10.10 \n" +
                "口腔科 \n" +
                "项目名称 检查结果 \n" +
                "口腔粘膜 无异常 \n" +
                "唇 无异常 \n" +
                "牙齿 部分缺失，牙周健康 \n" +
                "舌 正常 \n" +
                "腮腺 正常 \n" +
                "牙周 牙周健康 \n" +
                "鄂 正常 \n" +
                "颌下腺 正常 \n" +
                "颞下颌关节 活动自如，无弹响 \n" +
                "小结：口腔科检查未见异常，建议定期口腔清洁。 \n" +
                "小结医生：孙尚韩 \n" +
                "小结日期：2023.10.10 \n" +
                "一般科室 \n" +
                "项目名称 检查结果 单位 参考范围 提示 \n" +
                "身高 155cm CM   \n" +
                "体重 58kg KG   \n" +
                "收缩压 145 mmHg < 140  \n" +
                "舒张压 90 mmHg < 90  \n" +
                "腰围 85/ cm 60-90  \n" +
                "小结：血压偏高，建议定期监测血压，必要时心内科随访。 \n" +
                "小结医生：李金铭 \n" +
                "小结日期：2023.10.10 \n" +
                "血常规 \n" +
                "项目名称 检查结果 单位 参考范围 提示 \n" +
                "红细胞计数 4.0 10E12/L 4-5.5  \n" +
                "红细胞压积 47 L/L 42-49  \n" +
                "红细胞平均体积 88 f1 82-95  \n" +
                " \n" +
                " 第 4 页 共 7 页 \n" +
                "血常规 \n" +
                "项目名称 检查结果 单位 参考范围 提示 \n" +
                "红细胞平均血红蛋白 31 pg 27-33  \n" +
                "平均血红蛋白浓度 350 g/L 320-360  \n" +
                "血小板计数 200 10E9/L 100-300  \n" +
                "血小板平均体积 7 f1 6-14  \n" +
                "血小板压积 0.155 L/F 0.108-0.282  \n" +
                "血小板体积分布宽度 16 % 15-17  \n" +
                "血红蛋白 110 g/l 120-160  \n" +
                "白细胞计数 7.5 10E9/L 4-10  \n" +
                "淋巴细胞绝对值 3.8 10E9/L 0.8-4  \n" +
                "中性粒细胞绝对值 6 10E9/L 2-7  \n" +
                "单核细胞绝对值 0.78 10E9/L 0.1-0.9  \n" +
                "淋巴细胞相对百分比 38 % 20-40  \n" +
                "粒细胞相对百分比 70 % 50-75  \n" +
                "单核细胞相对百分比 8.7 % 3-9  \n" +
                "红细胞体积分布宽度 14.2 % 10.6-15  \n" +
                "血沉 3  0-15  \n" +
                "小结：血红蛋白略低，余血常规检查未见异常。 \n" +
                "小结医生：武招娣 \n" +
                "小结日期：2023.10.10 \n" +
                "尿常规 \n" +
                "项目名称 检查结果 单位 参考范围 提示 \n" +
                "尿蛋白（PRO） 微量    \n" +
                "尿糖（GLU） 阴性    \n" +
                "尿胆红素（BLL） 阴性    \n" +
                "尿胆原（URO） 3.2 umol/L   \n" +
                "尿潜血（BLO） 阴性    \n" +
                "尿酮体（KET） 阴性    \n" +
                "亚硝酸盐（NIT） 阴性    \n" +
                "尿白细胞（LEU） 阴性    \n" +
                "尿比重（）   1-1.03  \n" +
                "尿酸碱值 未见  4.5-8  \n" +
                "镜检红细胞 未见  0-3  \n" +
                "镜检白细胞 未见  0-5  \n" +
                "上皮细胞 未见    \n" +
                "管型 未见    \n" +
                "结晶 未见    \n" +
                "粘液丝 未见    \n" +
                "小结：尿蛋白微量，建议复查。 \n" +
                "小结医生：韩美子 \n" +
                "小结日期：2023.10.10 \n" +
                "生化 \n" +
                "项目名称 检查结果 单位 参考范围 提示 \n" +
                "前白蛋白 380  180-420  \n" +
                "总胆红素 21 umol/L 5-22  \n" +
                "谷草转氨酶 37 U/L 5-40  \n" +
                " \n" +
                " 第 5 页 共 7 页 \n" +
                "谷丙转氨酶 40 U/L 0-55  \n" +
                "生化 \n" +
                "项目名称 检查结果 单位 参考范围 提示 \n" +
                "总蛋白 63 g/L 62-82  \n" +
                "白蛋白 38 U/L 35-55  \n" +
                "球蛋白 28 U/L 20-34  \n" +
                "白球比 1.9 % 1.5-2.5  \n" +
                "乳酸脱氢酶 213 u/l 60-243  \n" +
                "碱性磷酸酶 142 u/l 40-150  \n" +
                "谷氨酶转肽酶 63 U/L 0-64  \n" +
                "直接胆红素 3.8 umol/L 1.7-6.8  \n" +
                "间接胆红素 13.8 umol/L 3.3-15.2  \n" +
                "肌酐 90 mmol/L 53-136  \n" +
                "尿素氮 7.0 mmol/L 2.3-7.2  \n" +
                "尿酸 389 umol/L 155-428  \n" +
                "空腹血糖 5.8 mmol/L 3.9-6.1  \n" +
                "总胆固醇 6.2 mmol/L 2.3-5.7  \n" +
                "甘油三酯 2.0 mmol/L 0.5-1.7  \n" +
                "低密度脂蛋白 4.0 mmol/L 2.1-3.1  \n" +
                "高密度脂蛋白 1.2 mmol/L 0.8-1.8  \n" +
                "小结：胆固醇及低密度脂蛋白略高，建议饮食控制，定期复查。 \n" +
                "小结医生：范倩 \n" +
                "小结日期：2023.10.10 \n" +
                "免疫 \n" +
                "项目名称 检查结果 单位 参考范围 提示 \n" +
                "CEA 8 ug/L 0-10  \n" +
                "AFP 11 ug/L 0-20  \n" +
                "CA19-9 28 kiu/L 0-37  \n" +
                "Ferritin 311 ug/L 0-322  \n" +
                "甲肝抗体 阴性  阴性  \n" +
                "丙肝抗体 阴性  阴性  \n" +
                "乙肝表面抗原 阴性  阴性  \n" +
                "乙肝表面抗体 阴性  阴性/阳性  \n" +
                "乙肝 e 抗原 阴性  阴性  \n" +
                "乙肝 e 抗体 阴性  阴性  \n" +
                "乙肝核心抗体 阴性  阴性  \n" +
                "小结：乙肝表面抗体阴性，建议接种乙肝疫苗。 \n" +
                "小结医生：黄海波 \n" +
                "小结日期：2023.10.10 \n" +
                "心电图 \n" +
                "项目名称 检查结果 \n" +
                "心律 窦性 \n" +
                "心率 78 次/分 \n" +
                "P — R 间期 正常范围 \n" +
                "Q — T 间期 正常范围 \n" +
                "QTC 正常范围 \n" +
                "电轴 未偏 \n" +
                "心电图 窦性心律正常心电图 \n" +
                "小结：心电图显示窦性心律，未见明显异常。 \n" +
                " \n" +
                " 第 6 页 共 7 页 \n" +
                "小结医生：商映杰 \n" +
                "小结日期：2023.10.10 \n" +
                " \n" +
                "B 超 \n" +
                "项目名称 检查结果 \n" +
                "肝 形态大小正常，实质回声均匀 \n" +
                "胆 胆囊壁光滑，无结石 \n" +
                "脾 轻度增大，回声均匀 \n" +
                "胰 形态大小正常，实质回声均匀 \n" +
                "肾 右肾下极见一大小约 5mm 的无回声区，考虑小囊肿可能 \n" +
                " \n" +
                " \n" +
                " \n" +
                " \n" +
                " \n" +
                " \n" +
                " \n" +
                " \n" +
                "小结：脾轻度增大，右肾小囊肿可能，建议进一步检查。 \n" +
                "小结医生：范伟 \n" +
                "小结日期：2023.10.10 \n" +
                "放射科 \n" +
                "项目名称 检查结果 \n" +
                "胸部正位片 胸廓对称，两肺纹理清晰，未见明显异常 \n" +
                "  \n" +
                "小结：未见明显异常 \n" +
                "小结医生：李莲英 \n" +
                "小结日期：2023.10.10 \n" +
                " \n" +
                "总检结论                 总检医生：张海               总检日期:2023.10.10 \n" +
                "综述：内科检查发现双下肢轻微凹陷性水肿，建议进一步检查心肾功能。眼科检查建议定期复查视力，并\n" +
                "考虑配戴老花镜。耳鼻喉科检查提示右耳听力下降，建议进一步评估。口腔科检查未见异常。血压偏高，\n" +
                "建议定期监测血压。血红蛋白略低，建议营养指导。尿常规提示尿蛋白微量，建议复查。生化检查显示胆\n" +
                "固醇及低密度脂蛋白略高，建议饮食控制。乙肝表面抗体阴性，建议接种乙肝疫苗。B超检查提示脾轻度\n" +
                "增大，右肾小囊肿可能，建议进一步检查。 \n" +
                " \n" +
                "建议： \n" +
                "针对双下肢水肿，建议心内科和肾内科进一步检查。 \n" +
                "定期复查视力，并考虑配戴老花镜。 \n" +
                "耳鼻喉科进一步评估右耳听力下降。 \n" +
                "监测血压，必要时心内科随访。 \n" +
                "营养指导，增加铁质摄入。 \n" +
                "复查尿常规，关注肾功能。 \n" +
                "饮食控制，减少胆固醇摄入。 \n" +
                "考虑接种乙肝疫苗。 \n" +
                "对脾脏和肾脏进行进一步检查。 \n" +
                "小结医生：李花花 \n" +
                "小结日期：2024.09.10 \n" +
                "【检查所见】 \n" +
                "脾轻度增大，右肾小囊肿可能，建议进一步检查。 \n" +
                " \n" +
                " 第 7 页 共 7 页 \n" +
                "报告说明：此报告作健康保健档案之用，如对检查结果有异议，请于一周内与体检办公室联系 \n" +
                "联系电话：（010）888888888（预约） \n" +
                "医院网址： https://nebula.itcast.cn  \n" +
                "体检地址：北京市昌平区建材城西路金燕龙办公楼 4 楼 \n"+
                "\n" +
                "\n" +
                "要求：\n" +
                "1. 提取体检报告中的“总检日期”；\n" +
                "2. 通过临床医学、疾病风险评估模型和数据智能分析，给该用户的风险等级和健康指数给出结果。风险等级分为：健康、提示、风险、危险、严重危险。健康指数范围为0至100分；\n" +
                "3. 根据用户身体各项指标数据，详细说明该用户各项风险等级的占比是多少，最多保留两位小数。结论格式：该用户健康占比20.00%，提示占比20.00%，风险占比20%，危险占比20%，严重危险占比20%；\n" +
                "4. 对于体检报告中的异常数据，请列出（异常数据的结论、体检项目名称、检查结果、参考值、单位、异常解读、建议）这8字段。解读异常数据，解决这些数据可能代表的健康问题或风险。分析可能的原因，包括但不限于生活习惯、饮食习惯、遗传因素等。基于这些异常数据和可能的原因，请给出具体的健康建议，包括饮食调整、运动建议、生活方式改变以及是否需要进一步检查或治疗等。\n" +
                "结论格式：异常数据的结论：肥胖，体检项目名称：体重指数BMI，检查结果：29.2，参考值>24，单位：-。异常解读：体重超标包括超重与肥胖。体重指数（BMI）=体重（kg）/身⾼（m）的平⽅，BMI≥24为超重，BMI≥28为肥胖；男性腰围≥90cm和⼥性腰围≥85cm为腹型肥胖。体重超标是⼀种由多因素（如遗传、进⻝油脂较多、运动少、疾病等）引起的慢性代谢性疾病，尤其是肥胖，已经被世界卫⽣组织列为导致疾病负担的⼗⼤危险因素之⼀。AI建议：采取综合措施预防和控制体重，积极改变⽣活⽅式，宜低脂、低糖、⾼纤维素膳⻝，多⻝果蔬及菌藻类⻝物，增加有氧运动。若有相关疾病（如⾎脂异常、⾼⾎压、糖尿病等）应积极治疗。\n" +
                "5. 根据这个体检报告的内容，分别给人体的8大系统打分，每项满分为100分，8大系统分别为：呼吸系统、消化系统、内分泌系统、免疫系统、循环系统、泌尿系统、运动系统、感官系统\n" +
                "6. 给体检报告做一个总结，总结格式：体检报告中尿蛋⽩、癌胚抗原、⾎沉、空腹⾎糖、总胆固醇、⽢油三酯、低密度脂蛋⽩胆固醇、⾎清载脂蛋⽩B、动脉硬化指数、⽩细胞、平均红细胞体积、平均⾎红蛋⽩共12项指标提示异常，尿液常规共1项指标处于临界值，⾎脂、⾎液常规、尿液常规、糖类抗原、⾎清酶类等共43项指标提示正常，综合这些临床指标和数据分析：肾脏、肝胆、⼼脑⾎管存在隐患，其中⼼脑⾎管有“⾼危”⻛险；肾脏部位有“中危”⻛险；肝胆部位有“低危”⻛险。\n" +
                "\n" +
                "输出要求：\n" +
                "最后，将以上结果输出为JSON格式，不要包含其他的文字说明，所有的返回结果都是json，详细格式如下：\n" +
                "\n" +
                "{\n" +
                "  \"totalCheckDate\": \"YYYY-MM-DD\",\n" +
                "  \"healthAssessment\": {\n" +
                "    \"riskLevel\": \"healthy/caution/risk/danger/severeDanger\",\n" +
                "    \"healthIndex\": XX.XX\n" +
                "  },\n" +
                "  \"riskDistribution\": {\n" +
                "    \"healthy\": XX.XX,\n" +
                "    \"caution\": XX.XX,\n" +
                "    \"risk\": XX.XX,\n" +
                "    \"danger\": XX.XX,\n" +
                "    \"severeDanger\": XX.XX\n" +
                "  },\n" +
                "  \"abnormalData\": [\n" +
                "    {\n" +
                "      \"conclusion\": \"异常数据的结论\",\n" +
                "      \"examinationItem\": \"体检项目名称\",\n" +
                "      \"result\": \"检查结果\",\n" +
                "      \"referenceValue\": \"参考值\",\n" +
                "      \"unit\": \"单位\",\n" +
                "      \"interpret\":\"对于异常的结论进一步详细的说明\",\n" +
                "      \"advice\":\"针对于这一项的异常，给出一些健康的建议\"\n" +
                "    }\n" +
                "  ],\n" +
                "  \"systemScore\": {\n" +
                "    \"breathingSystem\": XX,\n" +
                "    \"digestiveSystem\": XX,\n" +
                "    \"endocrineSystem\": XX,\n" +
                "    \"immuneSystem\": XX,\n" +
                "    \"circulatorySystem\": XX,\n" +
                "    \"urinarySystem\": XX,\n" +
                "    \"motionSystem\": XX,\n" +
                "    \"senseSystem\": XX\n" +
                "  },\n" +
                "  \"summarize\": \"体检报告的总结\"\n" +
                "}";
        QianfanApiClient client = new QianfanApiClient(restTemplate,promort);
        try {
            String result = client.sendChatRequest();
            System.out.println("API响应: " + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}